/**
 * 表单项基础类型
 */
export interface FormItemBaseConfig {
  /** 表单标签 */
  label?: string;
  /** 表单属性，用于双向绑定及表单验证 */
  prop: string;
  /** 必填，会自动添加红星，自动拼装提示语 */
  required?: boolean;
  /** 表单项类型，默认为custom类型 */
  type?: string;
  /** 自定义 label 内容 */
  customLabel?: boolean;
  /** 组件属性，传递给注册的组件 */
  componentProps?: Record<string, any>;
  /** 表单项组件属性 */
  itemProps?: Record<string, any>;
  /** 表单项验证规则 */
  rules?: FormRule | FormRule[];
  /** 是否显示渲染函数 */
  showRender?: (formData: Record<string, any>, item: FormItemConfig) => boolean;

  /** 自定义属性，可扩展添加 */
  [key: string]: any;
}

/**
 * 表单项配置
 */
export interface FormItemConfig extends FormItemBaseConfig {
  /** 动态计算的类名 */
  classList?: string;
  /** 组件包装类名 */
  wrapperClassList?: string;
  /** 是否显示 */
  show?: boolean;
}

/**
 * 表单规则
 */
export interface FormRule {
  /** 错误提示 */
  message?: string;
  /** 是否必填 */
  required?: boolean;
  /** 最小长度 */
  min?: number;
  /** 最大长度 */
  max?: number;
  /** 长度 */
  len?: number;
  /** 正则表达式 */
  pattern?: RegExp;
  /** 自定义校验函数 */
  validator?: (rule: any, value: any, callback: (error?: string) => void) => void;
  /** 触发方式 */
  trigger?: 'blur' | 'change' | Array<'blur' | 'change'>;

  /** 其他类型 */
  [key: string]: any;
}

/**
 * 表单配置
 */
export interface FormConfig {
  /** 表单项全局属性 */
  itemProps?: Record<string, any>;
  /** 组件全局属性 */
  componentProps?: Record<string, any>;
  /** 全局验证规则 */
  rules?: Record<string, FormRule | FormRule[]>;
  /** 标签后缀 */
  labelSuffix?: string;

  /** 其他配置 */
  [key: string]: any;
}

/**
 * 表单钩子结果
 */
export interface FormHookResult {
  /** 表单项列表（二维数组） */
  itemList: FormItemConfig[][];
  /** 表单项（单层数组，等同于itemList[0]，便于直接使用） */
  formItems: FormItemConfig[];
  /** 表单规则 */
  formRules: Record<string, any>;
  /** 表单配置 */
  formConfig: FormConfig;
}
